package com.example.fill.output;

import android.content.Context;

import java.io.File;
import java.util.List;

public abstract class OutputType<P,I> {
    Context context;
    File file;
    /**
     * create some Capacity that can supplier .rw with file
     * @param file targetFile
     * @return Platform
     */
    public abstract P createPlatform(File file);

    /**
     * 取得平台的读写能力
     * @param platform
     * @return
     */
    public abstract I getPlatformCapacity(P platform,String pageName,int index);

    public abstract void beforeWrite(P platform,I platformCapacity);

    /**
     * 为页面设置开头第一行
     * @param page
     * @param rowData
     */
    public abstract void initTitle(I page, List<String> rowData);

    /**
     * 标题拦截重组
     * @param title 标题
     * @return 重组标题
     */
    public List<String> onTitleInitialCompletion(List<String> title){
        return title;
    }

    /**
     * 为页面组装数据
     * @param page
     * @param yIndex
     * @param rowData
     */
    public abstract void initBody(I page,int yIndex, List<String> rowData);

    /**
     * 分享
     * @param integer
     */
    public abstract void onPostExecute(Integer integer);

    /**
     * 每当完成一个页面调用，进行某些操作
     * @param page
     */
    public void releasePage(I page){}

    /**
     * 每当完成所有页面，进行某些操作
     * @param platform
     */
    public abstract void releasePlatform(P platform);

    public abstract void notifyWriteFinished();

    /**
     * 获取输出文件后缀，带.
     * @return
     */
    abstract String getType();

    public OutputType<P, I> setContext(Context context) {
        this.context = context;
        return this;
    }

    public OutputType<P, I> setFile(File file) {
        this.file = file;
        return this;
    }
}
